package dao;

import entidades.Propietario;
import java.util.Vector;

/**
 * Clase de la capa de Persistencia, encargada de recuperar, guardar
 * y actualizar Propietarios de la base de datos.
 */
public class DAOPropietario extends DAO{
    /**
     * Retorna el vector de objetos Propietario cargadas en la base de datos.
     *
     * @return El vector de objetos Propietario, null si no existe
     */
    public static Vector<Propietario> getAll() {
        return getAll("Propietario");
    }

    /**
     * Obtiene los Propietarios que coinciden con la consulta
     * @param query String  Consulta con las condiciones que se deseas satisfacer
     * @return      Vector  Lista de propietarios que satisfacen la consulta
     */
    public static Vector<Propietario> get(String query) {
        return getAll(query);
    }
    
    /**
     * Obtiene el propietario con el ID especificado
     * @param id Integer        ID de un propietario
     * @return   Propietario    Propietario con el id especificado
     */
    public static Propietario getByID(Integer id) 
    {
        Vector<Propietario> propietarios = get("Propietario where idPropietario = "+ id);
        
        if(!propietarios.isEmpty()) 
            return propietarios.get(0);

        return null;
    }

    /**
     * Obtiene el primer Propietario con el numero de documento especificado
     * @param numDoc    String      Número de documento
     * @return          Propietario Propietario con el número de documento indicado
     */
    public static Propietario getByNumDoc(String numDoc) 
    {
        Vector<Propietario> propietarios = get("Propietario where numDoc = '"+numDoc+"'");
        
        if(!propietarios.isEmpty()) 
            return propietarios.get(0);
        return null;
    }

    /**
     * Persiste (inserta) un Propietario en la base de datos
     * @param p Propietario Propietario que se desea insertar
     * @return  boolean     true si fue exitoso, false en caso contrario
     */
    public static boolean insert(Propietario p) {
        return guardarOActualizarObjeto(p);
    }

    /**
     * Borra (elimina) un Propietario de la base de datos
     * @param p Propietario Propietario que se desea borrar
     * @return  boolean     true si fue exitoso, false en caso contrario
     */
    public static boolean delete(Propietario p) {
        return eliminarObjeto(p);
    }

    /**
     * Genera un vector con los campos que se necesitan en la tabla del listado
     * de propietarios.
     * @param p Propietario Propietario que se desea convertir a un vector con algunos
     *                      de sus atributos.
     * @return  Vector      Lista con los atributos que se insertan en una fila de la tabla
     */
    public static Vector convertirPropietarioParaMostrarEnTabla(Propietario p) {
        Vector propietario = new Vector();
        
        propietario.add(p.getNumDoc());
        propietario.add(p.getApellido()+ ", " + p.getNombre());
        propietario.add(p.getLocalidad().getNombre() + "(" + p.getLocalidad().getProvincia().getNombre() + ")");
        
        System.out.println("DNI: "+p.getNumDoc());
        System.out.println("Nombre: "+p.getApellido()+ ", " + p.getNombre());
        System.out.println("Localidad: "+p.getLocalidad().getNombre() + "(" + p.getLocalidad().getProvincia().getNombre() + ")");
        return propietario;
    }
    
    /**
     * Obtiene la inicial del tipo de documento a partir de un índice de un ComboBox
     * 
     * @param cbIndex   int     Índice del combo box
     * 
     * @return          String  Inicial del tipo de documento
     */
    public static String setTipoDocEnum(int cbIndex) {
        String tipoDoc = null;
        switch (cbIndex){
            case 0:
                tipoDoc = "DNI";
                break;
        
            case 1:
                tipoDoc = "PP";
                break;
                
            case 2:
                tipoDoc = "LC";
                break;
                
            case 3:
                tipoDoc = "LE";
                break;
        }
        return tipoDoc;
    }

}
